package org.linlinjava.litemall.wx.config;

import org.linlinjava.litemall.wx.annotation.support.LoginUserHandlerMethodArgumentResolver;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

import java.util.List;

/**
 * Web MVC 配置类
 * 主要用于配置跨域请求(CORS)和其他Web相关配置
 */
@Configuration  // 标记这是一个配置类，会被Spring自动扫描并加载
public class WebMvcConfiguration implements WebMvcConfigurer {
    
    /**
     * 配置跨域请求
     * 由于前端(uniapp)和后端可能部署在不同的域名下，需要配置CORS策略
     *
     * @param registry CORS注册器
     */
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")  // 匹配所有URL路径
                .allowedOrigins("*")  // 允许所有来源访问，生产环境建议指定具体域名
                .allowedMethods("GET", "HEAD", "POST", "PUT", "DELETE", "OPTIONS")  // 允许的HTTP请求方法
                .allowedHeaders("*")  // 允许所有请求头
                .exposedHeaders("X-Litemall-Token", "Content-Type")  // 允许浏览器访问的响应头
                .allowCredentials(true)  // 允许发送Cookie等认证信息
                .maxAge(3600);  // 预检请求的缓存时间，单位为秒
    }
    
    @Override
    public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
        argumentResolvers.add(new LoginUserHandlerMethodArgumentResolver());
    }
    
    /* 其他可能的配置方法：
    
    // 配置静态资源处理
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/static/**")
                .addResourceLocations("classpath:/static/");
    }
    
    // 配置拦截器
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new AuthInterceptor())
                .addPathPatterns("/**")
                .excludePathPatterns("/login", "/register");
    }
    
    // 配置视图控制器
    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/").setViewName("index");
    }
    */
} 